import { parseTime } from '@/utils'
const exportExcelMixin = {
  data() {
    return {
      filename: undefined,
      autoWidth: true,
      bookType: 'xlsx',
      labelArr: [],
      propArr: []
    }
  },
  methods: {
    initDataTableExportProperty() {
      this.labelArr = []
      this.propArr = []
      this.$nextTick(() => {
        // 由于 el-table-column 是 Vue 组件，它们不会直接出现在渲染后的 DOM 中，
        // 但是，我们可以通过 Vue 实例的 $refs 来访问它们，前提是我们在模板中为 el-table 设置了 ref，且为dataTable。
        // 获取 el-table-column 组件的引用
        if ('dataTable' in this.$refs) {
          const columns = this.$refs.dataTable.$children;
          // 遍历所有的 el-table-column 实例
          columns.forEach((column) => {
            if (column.prop) {
              this.labelArr.push(column.label);
              this.propArr.push(column.prop);
            }
          });
        }
      });
    },
    /** 自动导出Excel方法，只需要提供数据 */
    autoExportJsonData2Excel(jsonDataArr) {
      if (jsonDataArr.length > 0) {
        this.initDataTableExportProperty()
        import('@/utils/Export2Excel').then(excel => {
          const data = this.formatJson(this.propArr, jsonDataArr)
          excel.export_json_to_excel({
            header: this.propArr,
            data,
            filename: this.filename,
            autoWidth: this.autoWidth,
            bookType: this.bookType
          })
        })
      }
    },
    /** 导出Excel方法 */
    exportJsonData2Excel(headerArr, fieldsArr, jsonDataArr) {
      if (jsonDataArr.length > 0 && headerArr.length > 0 && fieldsArr.length > 0) {
        import('@/utils/Export2Excel').then(excel => {
          const data = this.formatJson(fieldsArr, jsonDataArr)
          excel.export_json_to_excel({
            header: headerArr,
            data,
            filename: this.filename,
            autoWidth: this.autoWidth,
            bookType: this.bookType
          })
        })
      }
    },
    formatJson(fieldsArr, jsonDataArr) {
      return jsonDataArr.map(v => fieldsArr.map(j => {
        if (j === 'timestamp') {
          return parseTime(v[j])
        } else {
          return v[j]
        }
      }))
    }
  }
}

export default exportExcelMixin

